# 日志模块
# 负责应用日志的初始化和配置。

import logging
import os
from datetime import datetime
from logging.handlers import RotatingFileHandler
from config.config_manager import get_logging_config, is_production_mode, is_debug_data_enabled

# 全局日志器
_logger = None


def init_logger():
    # 初始化日志系统
    global _logger
    
    if _logger is not None:
        return _logger
    
    # 获取日志配置
    log_config = get_logging_config()
    
    # 确保日志目录存在
    log_dir = log_config["log_dir"]
    os.makedirs(log_dir, exist_ok=True)
    
    # 创建格式化器
    formatter = logging.Formatter(
        f'%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        datefmt='%Y-%m-%d_%H%M%S'
    )
    
    # 创建根日志器
    root_logger = logging.getLogger()
    log_level = log_config["log_level"]
    root_logger.setLevel(getattr(logging, log_level))
    
    # 清除现有处理器
    root_logger.handlers.clear()
    
    # 生成带时间戳的日志文件名
    timestamp = datetime.now().strftime('%Y-%m-%d_%H%M%S')
    log_base_name = log_config["log_base_name"]
    log_filename = f'{log_dir}/{log_base_name}_{timestamp}.log'
    
    # 文件处理器（支持中文，按大小轮转）
    file_handler = RotatingFileHandler(
        filename=log_filename,
        maxBytes=log_config["log_max_bytes"],
        backupCount=log_config["log_backup_count"],
        encoding=log_config["log_encoding"]
    )
    file_handler.setFormatter(formatter)
    root_logger.addHandler(file_handler)
    
    # 控制台处理器（支持中文）
    if log_config["log_console"]:
        console_handler = logging.StreamHandler()
        console_handler.setFormatter(formatter)
        root_logger.addHandler(console_handler)
    
    _logger = logging.getLogger(__name__)
    _logger.info("日志系统初始化完成")
    _logger.info(f"日志级别: {log_level}")
    _logger.info(f"日志目录: {log_dir}")
    _logger.info(f"日志文件: {log_base_name}.log")
    _logger.info(f"文件编码: {log_config['log_encoding']}")
    
    return _logger


def get_logger(name: str = None):
    """获取日志器
    
    Args:
        name: 日志器名称
        
    Returns:
        Logger: 日志器实例
    """
    if _logger is None:
        init_logger()
    
    if name:
        return logging.getLogger(name)
    return _logger


def is_production_mode():
    """检查是否为生产模式"""
    log_config = get_logging_config()
    return log_config.get("production_mode", True)


def is_debug_data_enabled():
    """检查是否启用详细数据输出"""
    log_config = get_logging_config()
    return log_config.get("debug_data", False)


__all__ = ["init_logger", "get_logger", "is_production_mode", "is_debug_data_enabled"]
